
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>generator函数</title>
</head>
<body>
    
    <script>
        //Generator 函数是 ES6 提供的一种异步编程解决方案，语法行为与传统函数完全不同.  1: promise 2: async await
        // yield表达式，定义不同的内部状态.
        // generator  生成器

        // node  + express(promise) 操作mongodb  过时  node +   koa （Generator）   node + koa2 （async） +mongodb   mysql

        // 普通函数   一路到底   
        
        // 懒执行    generator函数   懒加载  v-lazy-load  插件  踹一脚走一步  next()

        // generator函数   状态  yield  中间会停

        function *show() {
            console.log("hello");
            yield;
            console.log("world");
        }

        console.log(show() );
        // 迭代器
        let genden = show()
        genden.next()
        genden.next()
        

        function *fn() {
            yield 1;
            yield 2;
            yield 3;
            yield 4;
            yield 5;
            yield 6;
            return 7  
        }

        let gd= fn()
        console.log(gd.next());
        console.log(gd.next());
        console.log(gd.next());
        console.log(gd.next());
        console.log(gd.next());
        console.log(gd.next());
        console.log(gd.next());
        

        //应用
         // 斐波那契数列  >1000   1+2+3+...n
        // 1 1 1 2 3 4 6 9 13 ...

        // 1 1 2 3 5 8 .... 大于1000时候 值等于多少
         
        function *fibonacci() {
            let [prev,curr] = [0,1]
            for (;  ; ) { 
                yield curr;
                [prev,curr] = [curr,prev+curr]

            }
        }

        for (const i of fibonacci()) {
            if (i>1000) {
            break;
            }
            console.log(i)
        }



    </script>
</body>
</html>